package core.manager.playerManager.flvPlayerManager
{
    import core.manager.*;
    import core.manager.modelManager.*;
    import core.manager.pluginManager.*;
    import core.manager.scriptManager.*;
    
    import flash.net.*;
    import flash.utils.*;
    
    import mx.containers.*;

    public class FlvPlayerManager extends Object implements IFlvPlayerManager
    {
        private var xmlData:XML;
        private var dataList:Dictionary;
        private var flvList:Dictionary;
        private static var _instance:FlvPlayerManager;

        public function FlvPlayerManager()
        {
            flvList = new Dictionary(true);
            dataList = new Dictionary(true);
            xmlData = ModelManager.getInstance().xmlFlv;
            if (_instance == null)
            {
                _instance = this;
                FlvPlayerManagerProxy.getInstance().flvPlayerManager=this;
            }
            else
            {
                throw new Error("FlvPlayerManager不能被实例化.");
            }
            return;
        }// end function

        public function showFlvById(URLLoader:String) : Boolean
        {
            var _loc_3:Number;
            var _loc_4:Number;
            var _loc_5:Number;
            var _loc_6:Number;
            var _loc_7:int;
            var _loc_8:String;
            var _loc_9:String;
            var _loc_10:int;
            var _loc_11:String;
            var _loc_12:Number;
            var _loc_13:Number;
            var _loc_14:String;
            var _loc_15:String;
            var _loc_16:int;
            var _loc_2:* = dataList[URLLoader];
            if (_loc_2 != null)
            {
                _loc_3 = _loc_2.x;
                _loc_4 = _loc_2.y;
                _loc_5 = _loc_2.scaleX;
                _loc_6 = _loc_2.scaleY;
                _loc_7 = _loc_2.autoPlay;
                _loc_8 = _loc_2.flvReadyScript;
                _loc_9 = _loc_2.flvCompleteScript;
                _loc_10 = _loc_2.floor;
                _loc_11 = _loc_2.url;
                _loc_12 = _loc_2.width;
                _loc_13 = _loc_2.height;
                _loc_14 = _loc_2.readyScript;
                _loc_15 = _loc_2.completeScript;
                _loc_16 = _loc_2.canSkip;
                if (MainSystemProperty.QUALITY == MainSystemProperty.CLEAR)
                {
                    flvList[URLLoader] = new FlvBase(_loc_11 + "_clear.flv", _loc_12, _loc_13, _loc_7, _loc_14, _loc_15, _loc_16);
                }
                else
                {
                    flvList[URLLoader] = new FlvBase(_loc_11 + "_smooth.flv", _loc_12, _loc_13, _loc_7, _loc_14, _loc_15, _loc_16);
                }
                flvList[URLLoader].scaleX = _loc_5;
                flvList[URLLoader].scaleY = _loc_6;
                flvList[URLLoader].x = _loc_3;
                flvList[URLLoader].y = _loc_4;
                Canvas(PluginManager.getInstance().getFloor(xmlData.DefaultFloor)).addChild(flvList[URLLoader]);
            }
            else
            {
                trace("FlvPlayerManager::指定的Flv不存在+" + URLLoader);
                return false;
            }
            return true;
        }// end function

        private function initDataBase() : void
        {
            var _loc_3:String;
            var _loc_4:String;
            var _loc_5:Number;
            var _loc_6:Number;
            var _loc_7:Number;
            var _loc_8:Number;
            var _loc_9:Number;
            var _loc_10:Number;
            var _loc_11:int;
            var _loc_12:int;
            var _loc_13:String;
            var _loc_14:String;
            var _loc_15:int;
            var _loc_1:int;
            var _loc_2:int;
            _loc_1 = 0;
            while (_loc_1 < xmlData.Flv.length())
            {
                
                _loc_3 = xmlData.Flv[_loc_1].@id;
                _loc_4 = xmlData.Flv[_loc_1].@url;
                if (_loc_3 != null && _loc_3 != "")
                {
                    _loc_5 = xmlData.Flv[_loc_1].@x ? (xmlData.Flv[_loc_1].@x) : (0);
                    _loc_6 = xmlData.Flv[_loc_1].@width ? (xmlData.Flv[_loc_1].@width) : (0);
                    _loc_7 = xmlData.Flv[_loc_1].@height ? (xmlData.Flv[_loc_1].@height) : (0);
                    _loc_8 = xmlData.Flv[_loc_1].@y ? (xmlData.Flv[_loc_1].@y) : (0);
                    _loc_9 = xmlData.Flv[_loc_1].@scaleX ? (xmlData.Flv[_loc_1].@scaleX) : (1);
                    _loc_10 = xmlData.Flv[_loc_1].@scaleY ? (xmlData.Flv[_loc_1].@scaleY) : (1);
                    _loc_11 = xmlData.Flv[_loc_1].@autoPlay ? (xmlData.Flv[_loc_1].@autoPlay) : (1);
                    _loc_12 = xmlData.Flv[_loc_1].@canSkip ? (xmlData.Flv[_loc_1].@canSkip) : (0);
                    _loc_13 = "";
                    _loc_14 = "";
                    _loc_15 = xmlData.Flv[_loc_1].@floor ? (xmlData.Flv[_loc_1].@floor) : (xmlData.DefaultFloor);
                    _loc_2 = 0;
                    while (_loc_2 < xmlData.Flv[_loc_1].ReadyScript.length())
                    {
                        
                        _loc_13 = _loc_13 + xmlData.Flv[_loc_1].ReadyScript[_loc_2];
                        _loc_2++;
                    }
                    _loc_2 = 0;
                    while (_loc_2 < xmlData.Flv[_loc_1].CompleteScript.length())
                    {
                        
                        _loc_14 = _loc_14 + xmlData.Flv[_loc_1].CompleteScript[_loc_2];
                        _loc_2++;
                    }
                    dataList[_loc_3] = {x:_loc_5, y:_loc_8, scaleX:_loc_9, scaleY:_loc_10, autoPlay:_loc_11, readyScript:_loc_13, completeScript:_loc_14, floor:_loc_15, url:_loc_4, width:_loc_6, height:_loc_7, canSkip:_loc_12};
                }
                _loc_1++;
            }
            return;
        }// end function

        public function removeFlvById(URLLoader:String) : Boolean
        {
            var _loc_2:* = flvList[URLLoader];
            if (_loc_2 != null)
            {
                _loc_2.dispose(null);
                if (_loc_2.parent != null)
                {
                    _loc_2.parent.removeChild(_loc_2);
                    _loc_2 = null;
                }
            }
            flvList[URLLoader] = null;
            return false;
        }// end function

        public function init() : void
        {
            initScript();
            initDataBase();
            return;
        }// end function

        private function initScript() : void
        {
            ScriptManager.getInstance().addApi(ScriptName.SHOW_FLV_BY_ID, showFlvById);
            ScriptManager.getInstance().addApi(ScriptName.REMOVE_FLV_BY_ID, removeFlvById);
            return;
        }// end function


        public static function getInstance() : FlvPlayerManager
        {
            if (_instance == null)
            {
                return new FlvPlayerManager;
            }
            return _instance;
        }// end function

    }
}
